using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using TestImport.Model;

namespace TestImport.View.BeherenBestanden
{
    public partial class CategorieBeheren : TestImport.SuperDataView
    {
        private Boolean isnew;
        private Boolean issnel;
        private String oudeCode;
        private BoekBeheer b = null;

        public CategorieBeheren()
        {
            InitializeComponent();
            this.BackColor = InstParameters.Default.schermkleur;
        }

        public CategorieBeheren(BoekBeheer b)
        {
            InitializeComponent();
            this.b = b;
        }

        private void categorieBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            this.Validate();
            this.categorieBindingSource.EndEdit();
            this.categorieTableAdapter.Update(this.onsBoekenPakketDataSet.Categorie);

        }

        private void CategorieBeheren_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.Categorie' table. You can move, or remove it, as needed.
            this.categorieTableAdapter.Fill(this.onsBoekenPakketDataSet.Categorie);
            //this.categorieTableAdapter.FillByTest(onsBoekenPakketDataSet.Categorie);
            this.WindowState = FormWindowState.Maximized;

        }

      
        private void Nieuw_Click(object sender, EventArgs e)
        {
            this.switchEnabledModus();
            this.switchButtonModus();
            this.categorieBindingSource.AddNew();
            txtCode.Focus();
            isnew = true;
            issnel = false;
        }

        private void Wijzig_Click(object sender, EventArgs e)
        {
            this.switchEnabledModus();
            this.switchButtonModus();
            isnew = false;
            issnel = false;
            oudeCode = txtCode.Text;

        }

        private void Wis_Click(object sender, EventArgs e)
        {

        }

        private void Registreer_Click(object sender, EventArgs e)
        {
            DialogResult result = DialogResult.No;
            if (issnel) result = DialogResult.Yes;
            else
            {
                if (isnew)
                    result = MessageBox.Show("Nieuwe categorie registreren?", "Registreren nieuwe categorie?", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                else
                    result = MessageBox.Show("Categorie wijzigen?", "Registreren gewijzigde categorie?", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
            }    
            if (result == DialogResult.Yes)
            {
                if (IsValide())
                {
                    if (!isnew)
                    {
                        if (!oudeCode.Equals(txtCode.Text)) UpdateCode();
                    }
                    try
                    {
                        this.categorieBindingSource.EndEdit();
                        this.categorieTableAdapter.Update(this.onsBoekenPakketDataSet.Categorie);
                        this.switchEnabledModus();
                        this.switchButtonModus();
                        this.categorieDataGridView.Refresh();
                    }
                    catch (System.Exception ex)
                    {
                        MessageBox.Show(ex.Message.ToString());
                    }
                }
            }
            else
            {
                this.categorieBindingSource.CancelEdit();
                this.switchEnabledModus();
                this.switchButtonModus();
            }
        }
        

        private void RegistreerEnNieuw_Click(object sender, EventArgs e)
        {
            issnel = true;
            this.Registreer_Click(sender, e);
            if (IsValide())
                this.Nieuw_Click(sender, e);
        }

        private void switchButtonModus()
        {
            Nieuw.Enabled = !Nieuw.Enabled;
            Wijzig.Enabled = !Wijzig.Enabled;
            Wis.Enabled = !Wis.Enabled;
            Registreer.Enabled = !Registreer.Enabled;
            RegistreerEnNieuw.Enabled = !RegistreerEnNieuw.Enabled;
            Annuleer.Enabled = !Annuleer.Enabled;
            this.categorieDataGridView.Enabled = !this.categorieDataGridView.Enabled;
        }

        private void switchEnabledModus()
        {
            txtCode.ReadOnly = !txtCode.ReadOnly;
            txtOmschrijving.ReadOnly = !txtOmschrijving.ReadOnly;
            txtOpmerking.ReadOnly = !txtOpmerking.ReadOnly;
        }

        private void Annuleer_Click(object sender, EventArgs e)
        {
            if (isnew)
            {
                this.categorieBindingSource.RemoveCurrent();
            }
            else
            {
                this.categorieBindingSource.CancelEdit();
            }
            this.switchEnabledModus();
            this.switchButtonModus();
        }

        public Boolean IsValide()
        {
            bool valide = txtOmschrijving.Text.Length > 0;
            if (!valide)
                MessageBox.Show("Omschrijving mag niet blanco zijn!!!");
            return valide;
        }

        private void categorieDataGridView_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            MessageBox.Show("Omschrijving mag niet blanco zijn!!!");
        }

        private void CategorieBeheren_FormClosing(object sender, FormClosingEventArgs e)
        {
            //zijn er niet geregistreerde wijzigingen?
            if (onsBoekenPakketDataSet.Categorie.GetChanges(DataRowState.Modified)!=null)
            {
                DialogResult result = MessageBox.Show("De wijzigingen in categorie registreren?", "Registreer categorieinfo?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (result == DialogResult.Yes)
                {
                    this.Validate();
                    this.categorieBindingSource.EndEdit();
                    this.categorieTableAdapter.Update(this.onsBoekenPakketDataSet.Categorie);
                }
            }
            if (b != null) b.refreshCategorie();
        }

        private void UpdateCode()
        {
            int aantal = Database.Instance.GetDatabase.Boek_GetAantalByCategorieCode(oudeCode);
            if (aantal > 0)
            {
                String nieuweCode = txtCode.Text;
                int aantalUpdates = Database.Instance.GetDatabase.Boek_UpdateCategorie(nieuweCode, oudeCode);
                this.Text = "Aantal updates " + aantalUpdates;
            }
        }

        
    }
}

